/* exercice 2 */ concat([],L,L). concat([X|L],R,[X|S]):-concat(L,R,S). palindrome([]):-!. palindrome([_]):-!. palindrome([X|L]):-concat(L1,[X],L),palindrome(L1). /* 2eme solution exe. 2 */ concat([],L,L). concat([X|L],R,[X|S]):-concat(L,R,S). inverse([],[]). inverse([X|L],Y):-inverse(L,Z), concat(Z,[X],Y). palindrome2(X):-inverse(X,X). /* exercice 4 */ move([_|L],L). move([X|L],[Y|L]):-X>0, Y is X-1. move([X|L],[X|R]):-move(L,R). minimax([],j,1):-!. minimax([],o,-1):-!. minimax(C,j,V):-setof(X,move(C,X),L), mapminimax(L,o,R), max(R,V). minimax(C,o,V):-setof(X,move(C,X),L), mapminimax(L,j,R), min(R,V). mapminimax([],_,[]). mapminimax([X|L],P,[V|R]):-minimax(X,P,V), mapminimax(L,P,R). max([V],V):-!. min([V],V):-!. max([V|L],M):-max(L,W), (V>W -> M is V; M is W). min([V|L],M):-min(L,W), (V M is V; M is W).